package main

import "fmt"

// 闭包 就是内层函数调用的变量是否是外层函数的，如果是则内层函数就是闭包
func calcss(base int) (func(int) int, func(int) int) {
	add := func(i int) int {
		base += i
		return base
	}
	sub := func(i int) int {
		base -= i
		return base
	}
	return add, sub
}

func main() {
	// 闭包 = 函数 + 外层变量的引用
	x, y := calcss(100)
	ret1 := x(200) // base = 100 + 200
	fmt.Println(ret1)
	ret2 := y(200) // base = 300-200
	fmt.Println(ret2)
}
